Página 1: Actitud e Inmigración

Column

¿Qué actitud se adopta hacia los demás?

¿Cómo impacta la inmigración en la calidad de vida?

Column

¿La actitud que tenemos hacia los demás correlaciona con nuestras opiniones acerca de la inmigración?

Página 2: Adopción LGTBQ+

Column

Opiniones sobre la adopción LGTBQ+

---
title: "Integración en la UE" 
author: "Alba Nuez Vilà"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
    social: menu
    source_code: embed
    theme: united  # Example theme
runtime: shiny
---

```{r setup, include=FALSE}
#Librerías de interés
library(flexdashboard)
library(tidyverse)
library(maps)
library(plotly)
library(shiny)
library(readxl)
library(dplyr)
library(leaflet)
library(lattice)
library(ggplot2)
library(gridExtra)
library(sf)  
library(leaflet)  
library(rnaturalearth)
library(rnaturalearthdata)
```

```{r}
#Cargamos la base de datos depurada
df <- read_excel("Depurada_ESS11_subset.xlsx")
#La variable país debe ser un factor
df$cntry <- as.factor(df$cntry)
#Nombre de los países
country_names <- c(
  AL = "Albania", AT = "Austria", BE = "Belgium", BG = "Bulgaria", 
  CH = "Switzerland", CY = "Cyprus", CZ = "Czechia", DE = "Germany", 
  DK = "Denmark", EE = "Estonia", ES = "Spain", FI = "Finland", 
  FR = "France", GB = "United Kingdom", GE = "Georgia", GR = "Greece", 
  HR = "Croatia", HU = "Hungary", IE = "Ireland", IS = "Iceland", 
  IL = "Israel", IT = "Italy", LT = "Lithuania", LU = "Luxembourg", 
  LV = "Latvia", ME = "Montenegro", MK = "North Macedonia", NL = "Netherlands", 
  NO = "Norway", PL = "Poland", PT = "Portugal", RO = "Romania", 
  RS = "Serbia", RU = "Russian Federation", SE = "Sweden", SI = "Slovenia", 
  SK = "Slovakia", TR = "Turkey", UA = "Ukraine", XK = "Kosovo"
)
df$cntry <- factor(df$cntry, levels = names(country_names), labels = country_names)

# Filtrar países con conteos mayores que 0
country_counts <- df %>% group_by(cntry) %>% summarise(count = n())
valid_countries <- country_counts %>% filter(count > 0) %>% pull(cntry)

# Filtrar el dataframe para incluir solo países válidos
df <- df %>% filter(cntry %in% valid_countries)
df$cntry <- droplevels(df$cntry)
```

Página 1: Actitud e Inmigración
=======================================================================
Column {.sidebar}
-----------------------------------------------------------------------

### Selección de país

```{r}
selectInput('cntry', 'Selecciona el país que quieras visualizar:', 
            choices = c("Mostrar todos los países" = "all", levels(df$cntry)), 
            selected = "all")
```

### Sobre el estudio

<div style="font-size: 0.8em;">
  <p style="text-align: justify;">Este dashboard muestra cómo cambian las opiniones en los distintos países europeos respecto a la actitud hacia los demás, al impacto de la inmigración, y a la adopción de niños y niñas por parte de personas homosexuales.</p>
  <p style="text-align: center;"><b>Página 1: ¿Cómo varía la actitud hacia los demás en diferentes países de la UE? ¿Cómo se correlaciona con la percepción del bienestar en relación con la inmigración?</b></p>
</div>

Column {data-height=80}
-----------------------------------------------------------------------

### ¿Qué actitud se adopta hacia los demás?

```{r}
renderPlot({
  selected_country <- input$cntry
  
  #Selección de países
  if (selected_country == "all") {
    filtered_df <- df
  } else {
    filtered_df <- df %>% filter(cntry == selected_country)
  }
  
  #Histograma actitud hacia los demás
  ggplot(filtered_df, aes(x = factor(actitud_positiva))) +
    geom_bar(fill = "coral1", color = "white") +
    labs(title = "Distribución de 'Actitud hacia los demás'", x = "Actitud", y = "Frecuencia") +
    geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
    annotate("text", x = -Inf, y = Inf, label = "0 = Muy negativa", hjust = -0.1, vjust = 1.5, size = 4, color = "black") +
    annotate("text", x = -Inf, y = Inf, label = "10 = Muy positiva", hjust = -0.1, vjust = 3.5, size = 4, color = "black") +
    theme(
      plot.title = element_text(hjust = 0.5, face = "bold"),  
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(color = "grey"),
      axis.text.x = element_text(angle = 90, hjust = 1, color = "black"),  
      axis.text.y = element_text(color = "black"),
      axis.title = element_text(color = "black")
    )
})
```

### ¿Cómo impacta la inmigración en la calidad de vida?

```{r}
renderPlot({
  selected_country <- input$cntry
  
  #Selección de países
  if (selected_country == "all") {
    filtered_df <- df
  } else {
    filtered_df <- df %>% filter(cntry == selected_country)
  }
  
  #Valores posibles variable
  possible_values_imwbcnt <- seq(min(filtered_df$imwbcnt, na.rm = TRUE), max(filtered_df$imwbcnt, na.rm = TRUE), by = 1)
  
  #Histograma opinión calidad de vida e inmigración
  ggplot(filtered_df, aes(x = imwbcnt)) +
    geom_histogram(binwidth = 1, fill = "coral1", color = "white") +
    labs(title = "Distribución de 'Opinión calidad de vida e inmigración'", x = "Impacto en calidad de vida", y = "Frecuencia") +
    geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
    scale_x_continuous(breaks = possible_values_imwbcnt) +
    annotate("text", x = -Inf, y = Inf, label = "0 = Empeoran la calidad de vida", hjust = -0.1, vjust = 1.5, size = 4, color = "black") +
    annotate("text", x = -Inf, y = Inf, label = "10 = Mejoran la calidad de vida", hjust = -0.1, vjust = 3.5, size = 4, color = "black") +
    theme(
      plot.title = element_text(hjust = 0.5, face = "bold"),
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(color = "grey"),
      axis.text = element_text(color = "black"),
      axis.title = element_text(color = "black")
    )
})
```

Column {data-height=100}
-----------------------------------------------------------------------
### ¿La actitud que tenemos hacia los demás correlaciona con nuestras opiniones acerca de la inmigración?

```{r}
renderPlot({
  selected_country <- input$cntry
  
  #Selección de países
  if (selected_country == "all") {
    filtered_df <- df
  } else {
    filtered_df <- df %>% filter(cntry == selected_country)
  }
  
  #Datos y matriz para el mapa de calor
  heatmap_data <- filtered_df %>%
    group_by(actitud_positiva, imwbcnt) %>%
    summarise(count = n()) %>%
    ungroup()
  
  heatmap_matrix <- xtabs(count ~ actitud_positiva + imwbcnt, data = heatmap_data)
  
  #Mapa de calor
  levelplot(heatmap_matrix, 
            xlab = "Actitud", 
            ylab = "Opinión inmigración y calidad de vida", 
            col.regions = colorRampPalette(c("white", "coral1")),
            scales = list(x = list(rot = 90)),
            panel = function(...) {
              panel.levelplot(...)
              panel.text(row(heatmap_matrix), col(heatmap_matrix), 
                         labels = heatmap_matrix, cex = 0.8)  # Display absolute counts
            },
            main = "Mapa de calor: Actitud vs opinión inmigración y calidad de vida")
})
```

Página 2: Adopción LGTBQ+
=======================================================================

Column {.sidebar}
-----------------------------------------------------------------------

### Selección de país

```{r}
checkboxGroupInput("selected_cntry", "Selecciona los países que quieras visualizar:",
                   choices = unique(df$cntry),
                   selected = unique(df$cntry))
```

### Sobre el estudio

<div style="font-size: 0.8em;">
  <p style="text-align: justify;">Este dashboard muestra cómo cambian las opiniones en los distintos países europeos respecto a la actitud hacia los demás, al impacto de la inmigración, y a la adopción de niños y niñas por parte de personas homosexuales.</p>
  <p style="text-align: center;"><b>Página 2: ¿Cómo difieren las opiniones sobre la adopción LGTBQ+ entre países?</b></p>
</div>

Column {data-height=100}
-----------------------------------------------------------------------

### Opiniones sobre la adopción LGTBQ+

```{r}
renderPlot({
  
  #Filtramos los datos según los países elegidos
  filtered_data <- df %>%
    filter(cntry %in% input$selected_cntry) %>%
    group_by(hmsacld, cntry) %>%
    summarise(count = n(), .groups = 'drop') %>%
    mutate(hmsacld = factor(hmsacld, levels = 1:5))
  
  #Gráfico de barras apiladas
  ggplot(filtered_data, aes(x = cntry, y = count, fill = hmsacld)) +
    geom_bar(stat = "identity") +
    labs(
      title = "Gráfico de Barras Apiladas: Adopción LGTBQ+ por País",
      x = "País",
      y = "Frecuencia",
      fill = "Adopción LGTBQ+"
    ) +
    scale_fill_manual(values = c("#67000D", "#A50F15", "#CB181D", "#EF3B2C", "#FB6A4A")) +
    theme_minimal() +
    annotate("text", x = Inf, y = Inf, label = "1 = Muy de acuerdo", hjust = 1.1, vjust = 1.5, size = 4, color = "black") +
    annotate("text", x = Inf, y = Inf, label = "5 = Muy en desacuerdo", hjust = 1.1, vjust = 3.5, size = 4, color = "black") +
    theme(
      axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
      plot.title = element_text(hjust = 0.5, face = "bold"), 
      panel.background = element_blank(),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      axis.line = element_line(color = "grey"),
      axis.text.y = element_text(color = "black"),
      axis.title = element_text(color = "black")
    )
})
```